/**
 * 主应用程序脚本
 * 初始化和使用FileDownloadManager
 */

// 全局变量
let downloadManager = null;

// 等待Layui加载完成，添加upload模块
layui.use(['layer', 'form', 'element', 'upload'], function() {
    console.log('Layui 加载完成');
    
    // 初始化下载管理器
    initDownloadManager();
    
    // 绑定页面事件
    bindPageEvents();
    
    // 页面加载完成提示
    layui.layer.msg('文件下载管理器已就绪', {
        icon: 1,
        time: 2000
    });
});

/**
 * 初始化下载管理器
 */
function initDownloadManager() {
    // 创建下载管理器实例
    downloadManager = new FileDownloadManager({
        // 默认配置
        remoteIp: '',
        localIp: getLocalIP(),
        transferMode: 'scp',
        
        // 事件回调
        callbacks: {
            onDownloadStart: function(config) {
                console.log('下载开始:', config);
                layui.layer.msg('下载任务已启动', {icon: 1});
            },
            
            onDownloadProgress: function(progress, config) {
                console.log(`下载进度: ${progress}%`);
            },
            
            onDownloadComplete: function(config) {
                console.log('下载完成:', config);
                // 这里可以添加下载完成后的处理逻辑
                // 比如刷新文件列表、发送通知等
            },
            
            onDownloadError: function(error, config) {
                console.error('下载错误:', error);
                layui.layer.msg('下载失败: ' + error.message, {icon: 2});
            }
        }
    });
    
    console.log('下载管理器初始化完成');
}

/**
 * 绑定页面事件
 */
function bindPageEvents() {
    // 基本下载按钮
    $('#downloadBtn').on('click', function() {
        downloadManager.showDownloadDialog();
    });
    
    // 带预设配置的下载按钮
    $('#downloadBtnWithConfig').on('click', function() {
        downloadManager.showDownloadDialog({
            remoteIp: '192.168.1.100',
            remotePath: '/home/user/documents/data.tar.gz',
            localPath: '/home/local/downloads/',
            transferMode: 'server'
        });
    });
    
    // 查看当前配置按钮
    $('#showConfigBtn').on('click', function() {
        const config = downloadManager.getConfig();
        const configText = Object.entries(config)
            .map(([key, value]) => `<strong>${key}:</strong> ${value || '(未设置)'}`)
            .join('<br>');
            
        layui.layer.alert(
            `<div style="text-align: left;">${configText}</div>`,
            {
                title: '当前配置信息',
                area: ['400px', 'auto']
            }
        );
    });
}

/**
 * 获取本地IP地址（模拟）
 * 实际项目中可能需要通过API获取
 */
function getLocalIP() {
    // 这里是模拟的本地IP获取
    // 实际项目中可以通过WebRTC或服务器API获取
    return '192.168.1.10';
}

/**
 * 工具函数：显示操作确认对话框
 */
function showConfirmDialog(message, callback) {
    layui.layer.confirm(message, {
        icon: 3,
        title: '确认操作'
    }, function(index) {
        layui.layer.close(index);
        if (typeof callback === 'function') {
            callback();
        }
    });
}

/**
 * 工具函数：显示成功消息
 */
function showSuccess(message) {
    layui.layer.msg(message, {
        icon: 1,
        time: 2000
    });
}

/**
 * 工具函数：显示错误消息
 */
function showError(message) {
    layui.layer.msg(message, {
        icon: 2,
        time: 3000
    });
}

/**
 * 工具函数：显示信息消息
 */
function showInfo(message) {
    layui.layer.msg(message, {
        icon: 6,
        time: 2000
    });
}

// 全局错误处理
window.addEventListener('error', function(e) {
    console.error('全局错误:', e.error);
    showError('系统发生错误，请检查控制台');
});

// 导出到全局作用域供其他脚本使用
window.downloadManager = downloadManager;
window.showSuccess = showSuccess;
window.showError = showError;
window.showInfo = showInfo;
window.showConfirmDialog = showConfirmDialog;